package com.dp1.pucp.Seguridad.Controlador;

import com.dp1.pucp.Seguridad.DAO.*;
import com.dp1.pucp.Seguridad.Vista.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import com.dp1.pucp.Modelo.Clases.Perfil;
import com.dp1.pucp.Util.Validaciones;
import java.util.ArrayList;

public class BuscarPerfilControlador {

    private PerfilDAO perfilDAO;
    private UsuarioDAO usuarioDAO;
    private BuscarPerfilGUI buscarPerfilGUI;
    private UsuarioGUI usuarioGUI;
    private Perfil perfil;
    private ArrayList<Perfil> lstPerfil;

    public BuscarPerfilControlador(UsuarioDAO dao, BuscarPerfilGUI v, UsuarioGUI q) {
        usuarioDAO = dao;
        buscarPerfilGUI = v;
        usuarioGUI = q;

        perfilDAO = new PerfilDAO();
        buscarPerfilGUI.addBuscarListener(new listarPerfil());
        buscarPerfilGUI.addCancelarListener(new cancelarPerfiles());
        buscarPerfilGUI.addSeleccionarListener(new seleccionarPerfil());
        buscarPerfilGUI.addLimpiarListener(new limpiarListener());

    }

    public void listarResultados() {
        lstPerfil = perfilDAO.listarPerfil();
        this.realizarFiltro(lstPerfil);
        buscarPerfilGUI.llenaGrilla(lstPerfil);
    }

    class listarPerfil implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            listarResultados();
        }
    }

    class seleccionarPerfil implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int sel = buscarPerfilGUI.getFilaSel();
            Perfil u = null;
            ArrayList<Perfil> totalperfiles = new ArrayList<>();
            for (int i = 0; i < lstPerfil.size(); i++) {
                if (lstPerfil.get(i).getEstado() == 1) {
                    totalperfiles.add(lstPerfil.get(i));
                }
            }

            if (sel != -1) {
                u = totalperfiles.get(sel);
                usuarioGUI.setPerfil(u);
                buscarPerfilGUI.dispose();
            } else {
                Validaciones.mostrarMensajeErrorVal("Debe seleccionar un Perfil");
            }
        }
    }

    class limpiarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            buscarPerfilGUI.LimpiarDatos();
        }
    }

    class cancelarPerfiles implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int salida;

            salida = Validaciones.solicitarConfirmacionSalida("buscar perfil");

            if (salida == 0) {
                buscarPerfilGUI.dispose();
            }
            return;
        }
    }

    public ArrayList<Perfil> realizarFiltro(ArrayList<Perfil> lista) {
        ArrayList<Perfil> listPefil = new ArrayList<>();
        ArrayList<Perfil> tempListPerfil;

        tempListPerfil = lista;
        for (int i = 0; i < tempListPerfil.size(); i++) {
            if (tempListPerfil.get(i).getEstado() == 1) {
                listPefil.add(tempListPerfil.get(i));
            }
        }


        tempListPerfil = listPefil;
        listPefil = new ArrayList<>();

        if (!buscarPerfilGUI.getNombre().equalsIgnoreCase("")) {

            for (int i = 0; i < tempListPerfil.size(); i++) {
                if (tempListPerfil.get(i).getNombre().toUpperCase().contains(buscarPerfilGUI.getNombre().toUpperCase())) {
                    listPefil.add(tempListPerfil.get(i));
                }
            }
        } else {
            listPefil = tempListPerfil;
        }

        return listPefil;
    }
}
